Build Your Own Container Using Less than 100 Lines of Go
https://www.infoq.com/articles/build-a-container-golang/
ポイント
リソース共有
プロセスのisolation (独立/分離)
軽量な仮想化
ファイルシステムとmetadataのパッケージ化
chroot jail
run.sh
セキュアではなく、スケールなど管理がしにくい
AMI, VMDK, Vagrant
バンドルのサイズが大きいので送るのが大変
キャッシング
ベースイメージをキャッシュできることで送るのが楽
https://gyazo.com/e21daaa0642809f9216734a815b03b3d
Docker
セキュアに、繰り返しコードを送ることができる
コンテナとは
Namespace
コンテナの環境を分離する
pid
pid namespace はプロセスのマッピングテーブルを提供する
コンテナからkernelにpidを探しにくときにマッピングテーブルから探すようにすることで独立させている
MNT
mount namespaceは他のnamespaceに影響を与えない独立したディレクトリをマウント/アンマウントするプロセス
pivot_rootを使うことでプロセスに個々のファイルシステムを提供
https://linuxjm.osdn.jp/html/util-linux/man8/pivot_root.8.html
NET
network namespaceは独立したネットワークスタックを持つプロセスを提供する
UTS
UTS namespaceは独立したホスト、ドメイン名を提供
IPC
IPC namespaceはメッセージキューなどプロセス間の通信を提供
USER
USER namespaceは独立したユーザーを提供
uidのマッピングをしてる
コンテナ内でルートユーザーのような振る舞いができる
セキュリティの観点で重要
cgroup
プロセスやタスクIDを管理しリソースの制限をかけている
layerd filesystem